% !TEX TS-program = pdflatex
% !TEX encoding = UTF-8 Unicode

% This file is a template using the "beamer" package to create slides for a talk or presentation
% - Talk at a conference/colloquium.
% - Talk length is about 20min.
% - Style is ornate.

% MODIFIED by Jonathan Kew, 2008-07-06
% The header comments and encoding in this file were modified for inclusion with TeXworks.
% The content is otherwise unchanged from the original distributed with the beamer package.

\documentclass{beamer}


% Copyright 2004 by Till Tantau <tantau@users.sourceforge.net>.
%
% In principle, this file can be redistributed and/or modified under
% the terms of the GNU Public License, version 2.
%
% However, this file is supposed to be a template to be modified
% for your own needs. For this reason, if you use this file as a
% template and not specifically distribute it as part of a another
% package/program, I grant the extra permission to freely copy and
% modify this file as you see fit and even to delete this copyright
% notice. 


\mode<presentation>
{
  \usetheme{Warsaw}
  % or ...

  \setbeamercovered{transparent}
  % or whatever (possibly just delete it)
}


\usepackage[english]{babel}
% or whatever

\usepackage[utf8]{inputenc}
% or whatever

\usepackage{times}
\usepackage[T1]{fontenc}
% Or whatever. Note that the encoding and the font should match. If T1
% does not look nice, try deleting the line with the fontenc.


\title[PyMongo] % (optional, use only with long paper titles)
{PyMongo -- Python binding of MongoDB}


\author[Zhilei Ren] % (optional, use only with lots of authors)
{Zhilei Ren}
% - Give the names in the same order as the appear in the paper.
% - Use the \inst{?} command only if the authors have different
%   affiliation.

% This is only inserted into the PDF information catalog. Can be left
% out. 



% If you have a file called "university-logo-filename.xxx", where xxx
% is a graphic format that can be processed by latex or pdflatex,
% resp., then you can add a logo as follows:

% \pgfdeclareimage[height=0.5cm]{university-logo}{university-logo-filename}
% \logo{\pgfuseimage{university-logo}}



% Delete this, if you do not want the table of contents to pop up at
% the beginning of each subsection:


% If you wish to uncover everything in a step-wise fashion, uncomment
% the following command: 

%\beamerdefaultoverlayspecification{<+->}


\begin{document}

\begin{frame}
  \titlepage
\end{frame}



% Structuring a talk is a difficult task and the following structure
% may not be suitable. Here are some rules that apply for this
% solution: 

% - Exactly two or three sections (other than the summary).
% - At *most* three subsections per section.
% - Talk about 30s to 2min per frame. So there should be between about
%   15 and 30 frames, all told.

% - A conference audience is likely to know very little of what you
%   are going to talk about. So *simplify*!
% - In a 20min talk, getting the main ideas across is hard
%   enough. Leave out details, even if it means being less precise than
%   you think necessary.
% - If you omit details that are vital to the proof/implementation,
%   just say so once. Everybody will be happy with that.

\begin{frame}

	\begin{block}{Overview}
		PyMongo is a Python distribution containing tools for working with MongoDB, and is the recommended way to work with MongoDB from Python. This documentation attempts to explain everything you need to know to use PyMongo.
	\end{block}
\end{frame}

\begin{frame}
	\begin{block}{Installation}
		\begin{itemize}
			\item \$python -m pip install pymongo
			\item \$python -m pip install pymongo==3.1.1
			\item \$python -m pip install ipython \#ipython is recommended 
		\end{itemize}
	\end{block}
	\begin{alertblock}{Warning}
		Do not install the 'bson' package. PyMongo comes with its own bson package; doing "pip install bson" or "easy\_install bson" installs a third-party package that is incompatible with PyMongo.
	\end{alertblock}
\end{frame}
\begin{frame}
	\begin{block}{Connecting MongoDB}
		>{}>{}> from pymongo import MongoClient

		>{}>{}> client = MongoClient()

		>{}>{}> db = client['mongo-tut']

		>{}>{}> collection = db['persons']

	\end{block}
	\begin{block}{Document represented by dict}
		>{}>{}> person = \{``name'': ``zhangsan'', ``age'':3\}

		>{}>{}> import datetime

		>{}>{}> native = \{``date'': datetime.datetime.utcnow()\}
	\end{block}
\end{frame}
\begin{frame}
	\begin{block}{Inserting documents}
		>{}>{}> person = \{``name'': ``zhangsan'', ``age'':3\}

		>{}>{}> collection.insert(person) \#get a warning, use insert\_one instead

		>{}>{}> person2 = \{``name'': ``lisi'', ``age'': 20\}

		>{}>{}> collection.insert\_many([person, person2])

	\end{block}
    \begin{block}{Traversing documents}
        >{}>{}> for doc in collection.find():

        . . . \ \ \ \ print(doc['name'])

        . . . \ \ \ \ print(str(doc['age']))

    \end{block}
\end{frame}
\begin{frame}
    \begin{block}{Querying}
        >{}>{}> for doc in collection.find(\{'age' : \{'\$gt' : 15\}\}):

        . . . \ \ \ \ print(doc['name'])

        . . . \ \ \ \ print(str(doc['age']))
    \end{block}
    \begin{block}{Updating}
        >{}>{}> collection.update\_many(\{'age' : \{'\$gt' : 15\}\}, \{'\$inc' : \{'age' : 3\}\})

        \#There is also update\_one

    \end{block}
    \begin{block}{Deleting}
        >{}>{}> collection.delete\_many(\{'age' : \{'\$gt' : 15\}\})

        \#There is also delete\_one

    \end{block}
\end{frame}

\end{document}


